\documentclass[a4paper,12pt]{article}
\usepackage{fancyhdr}
\usepackage[MeX]{polski}
\usepackage[utf8]{inputenc}
\usepackage{amsmath,amsthm,amssymb}
\usepackage[ lmargin=2.7cm]{geometry}
\usepackage{graphicx}
\usepackage{grffile}


\pagestyle{fancy}
\lhead{Zastosowanie algorytmów genetycznych do konstrukcji strategii inwestycyjnych}
\rhead{\bfseries}

\author{Adrian Chudziński, Przemysław Gospodarczyk}
\title{Zastosowanie algorytmów genetycznych do konstrukcji strategii inwestycyjnych -- raport}

\begin{document}
\makeatletter
    \renewcommand\@seccntformat[1]{\csname the#1\endcsname.\quad}
    \renewcommand\numberline[1]{#1.\hskip0.7em}
\makeatother

\begin{titlepage}
\begin{center}

    \textsc{Studencki Projekt z Algorytmów Ewolucyjnych}\\[0.1cm]
    \textsc{IIUWr 2010/2011}\\[6cm]
    Adrian Chudziński, Przemysław Gospodarczyk\\[1cm]
    \textsc{\Large Zastosowanie algorytmów genetycznych do konstrukcji strategii inwestycyjnych }\\[0.25cm]
    \textsc{\large raport}\\[8.675cm]
    \begin{tabular}{ | c | p{4cm} | p{4.25cm} | c | }
        \hline
        {\footnotesize Wersja}  &
        {\footnotesize Zmiany}  &
        {\footnotesize Autor} &
        {\footnotesize Data}    \\
        \hline
        {\footnotesize 1.0}                                                                   &
        {\footnotesize Pierwsza wersja}                                                          &
        \par {\footnotesize Adrian Chudziński \par Przemysław Gospodarczyk}                                          &
        {\footnotesize 2010-12-19}                                                            \\
        \hline
    \end{tabular}
\end{center}
\end{titlepage}
\break

\setcounter{page}{2}

\tableofcontents

\break

\section[Opis problemu]{Opis problemu}
Dysponując D = 250 wprowadzonymi do programu regułami finansowymi, algorytm genetyczny ma za zadanie wybrać podzbiór zbioru wszystkich reguł (w dalszej części tej pracy podzbiór ten zwany jest ekspertem), zawierający reguły, które poprzez generowane decyzje pozwoliłyby zarobić najwięcej na danych akcjach, w danym okresie.\\
Każda z wprowadzonych do programu reguł, oparta jest na odpowiednio dobranym wskaźniku ekonomicznym i ze względu na kurs indeksu w danym okresie generuje jeden z trzech rodzajów sygnału:

\begin{itemize}
    \item[-] kupno -- kiedy reguła przewiduje wzrost kursu akcji,
    \item[-] sprzedaż -- kiedy reguła przewiduje spadek kursu akcji,
    \item[-] zalecenie wstrzymania się od ewentualnego otwierania i zamykania transakcji.
\end{itemize}

\noindent Każdy ekspert dysponuje kwotą 8000 zł przeznaczoną na kupno akcji oraz 324 akcjami danej spółki.
Sygnał dla danego eksperta, obliczany jest na podstawie ilości sygnałów danego rodzaju generowanych przez wszystkie reguły znajdujące się w podzbiorze.\\
Znając sygnał dla danego eksperta oraz jego siłę (przewaga liczności, jaką posiada najczęściej powtarzający się sygnał) możemy symulować inwestycje eksperta w akcje danej spółki, w danym okresie, na podstawie wczytanych kursów.\\
Algorytm ma za zadanie zwrócić najlepszego eksperta ze wszystkich, które kiedykolwiek były rozważane w którejkolwiek iteracji algorytmu oraz łączną kwotę, jaką zarobił na akcjach danej spółki, w zadanym okresie.
Znaleziony w ten sposób najlepszy ekspert dla sprawdzonego okresu zajmuje się następnie doradzaniem inwestycyjnym w kolejnych okresach, w których również badane są jego zarobki.

\section[Dane wejściowe]{Dane wejściowe}

W algorytmie korzystamy z danych o sesjach giełdowych udostępnionych bezpłatnie przez serwis DM BOŚ http://www.bossa.pl/. Dane zawierają historie zmian cen akcji w osobnych plikach tekstowych dla każdej spółki notowanej na GPW. Każdy plik zawiera dane w formacie CSV. Pierwszy wiersz zawiera nagłówek, który jest pomijany przez program. Kolejne wiersze zawierają następujące pola rozdzielone przecinkami:

\begin{itemize}
    \item[-] symbol spółki,
    \item[-] data sesji (8 cyfr w formacie YYYYMMDD),
    \item[-] cena otwarcia,
    \item[-] maksymalna cena,
    \item[-] minimalna cena,
    \item[-] cena zamknięcia,
    \item[-] wolumen.
\end{itemize}

Wszystkie ceny podawane są z dokładnością do dwóch miejsc po przecinku, część dziesiętna jest oddzielona kropką od części całkowitej.

\section[Zastosowane wskaźniki ekonomiczne i utworzone reguły]{Zastosowane wskaźniki ekonomiczne i utworzone reguły}

Do analizy wykorzystaliśmy klasyczne wskaźniki śledzące trend oraz oscylatory wykorzystywane w analizie technicznej. Użyliśmy

\begin{itemize}
    \item[-] zwykłej średniej kroczącej, dającej sygnał po przecięciu kursu,
    \item[-] ważonej średniej kroczącej,
    \item[-] wykładniczej średniej kroczącej,
    \item[-] wskaźnika MACD,
    \item[-] wskaźników dających sygnał po przecięciu się dwóch średnich kroczących -- zwykłej i wykładniczej oraz drugi, zwykłej i ważonej,
    \item[-] wskaźnika siły względnej (RSI),
    \item[-] wskaźnika \%R (Williams Percentage Rate),
    \item[-] wskaźnika MoneyFlow.
\end{itemize}

Każdy wskaźnik jest parametryzowany i występuje w aplikacji w kilkudziesięciu wersjach. Parametry zostały dobrane losowo.

\section[Kodowanie i interpretacja ekspertów]{Kodowanie i interpretacja ekspertów}
Każdy ekspert jest wektorem D bitowym, gdzie 1 na i-tym bicie oznacza, że dany ekspert bierze pod uwagę sygnały wysyłane przez i-tą regułę. Jeżeli i-ty bit jest wyzerowany to ekspert pomija sygnały wysyłane przez i-tą regułę.

\section[Funkcja celu]{Funkcja celu}

Naszym celem jest maksymalizacja zysków z gry na giełdzie. Dla zadanego osobnika funkcja celu policzy liczbę sygnałów kupna, sprzedaży i pozostawienia portfela bez zmian zgłaszanych przez wskaźniki, dla których osobnik ma gen 1. Ze wszystkich zgłoszonych sygnałów, każdego dnia wybieramy ten, który pojawia się najczęściej.

Dla każdego dnia, w przypadku wydania rekomendacji sprzedaj, sprzedajemy połowę akcji, a dla rekomendacji kupuj, podwajamy obecną liczbę akcji o ile mamy wystarczają ilość gotówki.

\section[Funkcja przystosowania]{Funkcja przystosowania}
Wartość funkcji przystosowania dla i-tego eksperta jest wyliczana na podstawie wartości funkcji celu $F$ opisanej poprzednim rozdziale.
\begin{equation}
f(x_i) = \frac {F(x_i) - F_{min}}{\sum_{j=1}^{N}{(F(x_j) - F_{min})}}
\end{equation}
Przez N w tej pracy oznaczony będzie rozmiar populacji.\\
Przez $F_{min}$ oznaczona jest wartość funkcji celu dla najgorszego eksperta.

\section[Zastosowana metoda selekcji rodziców]{Zastosowana metoda selekcji rodziców}
Algorytm wykorzystuje metodę selekcji ruletkowej. Ekspert zostaje wybrany do pokolenia rodziców z prawdopodobieństwem równym jego wartości funkcji przystosowania (najlepiej przystosowani eksperci mają największe szanse na zostanie rodzicami). Algorytm wykorzystuje tu fakt, że wartości funkcji przystosowania mogą być wykorzystywane jako prawdopodobieństwo, ze względu na omawiane na wykładzie własności funkcji przystosowania.

\section[Operatory przeszukiwania]{Operatory przeszukiwania}
\subsection[Zastosowane operatory krzyżowania]{Zastosowane operatory krzyżowania}
Zastosowano cztery operatory krzyżowania (z czego pierwsze trzy były omawiane na wykładzie i ich opis działania zostanie w tej pracy pominięty):
\begin{itemize}
    \item[-] krzyżowanie jednorodne (UX, ang. \emph{uniform crossover}),
    \item[-] krzyżowanie jednopunktowe (ang. \emph{one-point crossover}),
    \item[-] krzyżowanie dwupunktowe (ang. \emph{two-point crossover}),
    \item[-] krzyżowanie half-uniform (HUX).
\end{itemize}
Każdy z operatorów krzyżowania jest stosowany w danej iteracji algorytmu z prawdopodobieństwem zadanym jako parametr algorytmu.

\subsubsection[Krzyżowanie half-uniform (HUX)]{Krzyżowanie half-uniform (HUX)}
Przy tworzeniu pary potomków, para rodziców wymienia się połową bitów, na których krzyżowane osobniki się różnią.
Bity podlegające wymianie są losowane z rozkładem jednostajnym ze zbioru wszystkich bitów, na których są różnice.
Tak zmodyfikowana para rodziców jest zwracana przez operator jako para potomków.

\subsection[Zastosowany operator mutacji]{Zastosowany operator mutacji}
Każdy gen osobnika potomnego jest negowany z małym prawdopodobieństwem zadanym jako parametr algorytmu.

\section[Zastosowane strategie zamiany pokolenia]{Zastosowane strategie zamiany pokolenia}
Każda z czterech opisanych poniżej strategii zamiany pokolenia jest stosowana w danej iteracji algorytmu z prawdopodobieństwem zadanym jako parametr algorytmu. Użyte nazwy strategii odpowiadają nazwom strategii użytych w algorytmie i są to nazwy powstałe na potrzeby tego projektu, opisowe, w szczególności różnią od rzeczywistych, zwyczajowych nazw tych strategii.

\subsection[Strategia full swap]{Strategia full swap}
Najprostsza strategia, która wymienia całą populację wstawiając w jej miejsce potomków, wygenerowanych przez operatory przeszukiwania (strategia $(\mu, \lambda)$).

\subsection[Strategia replace k worst]{Strategia replace k worst}
Strategia wymieniająca k najgorzej przystosowanych osobników w populacji na k najlepiej przystosowanych osobników potomnych.
K jest parametrem tej strategii.

\subsection[Strategia best of pair]{Strategia best of pair}
Nowe pokolenie tworzą lepsi osobnicy z par (rodzic, potomek).

\subsection[Strategia best of current population and children]{Strategia best of current population and children}
Nowe pokolenie tworzą najlepiej przystosowani osobnicy wśród sumy mnogościowej populacji potomków i bieżącej populacji (strategia $(\mu + \lambda)$).

\section[Schemat ogólny zastosowanego algorytmu]{Schemat ogólny zastosowanego algorytmu}
Uproszczony schemat ogólny algorytmu w pseudokodzie (w szczególności, w kodzie źródłowym nazwy poszczególnych metod i ich parametry są inne):\\\\
\noindent //inicjuje populację (wypełnia kolekcję \texttt{P} losowymi wektorami binarnymi rozmiaru D)\\
\noindent \texttt{P = RANDOM-POPULATION(N, D)} \\
\noindent //ocena populacji (liczenie wartości funkcji celu i przystosowania dla osobników)\\
\noindent \texttt{POPULATION-EVALUATION(P, F)}\\
\noindent //warunkiem końcowym jest osiągnięcie zadanej liczby iteracji\\
\noindent \texttt{FOR (i = 0; i < MAX-ITER; i++)} \\
\noindent \texttt{\{}
\par //selekcja ruletkowa na podstawie wartości funkcji przystosowania
\par \texttt{PARENTS = ROULETTE-SELECTION(P, f)}
\par //losowanie operatora krzyżowania dla danej iteracji
\par \texttt{CROSSOVER-OPERATOR = RANDOM-OPERATOR(CROSSOVER-PROBABILITY-VECTOR)}
\par //krzyżowanie losowym operatorem
\par \texttt{CHILDREN = CROSSOVER-OPERATOR(PARENTS)}
\par //mutacja z pr. $\theta$ na poszczególnych bitach
\par \texttt{CHILDREN = MUTATION(CHILDREN, $\theta$)}
\par //losowanie strategii zamiany pokolenia dla danej iteracji
\par \texttt{REPLACEMENT-STRATEGY = RANDOM-REPLACEMENT(REPLACEMENT-PROBABILITY-VECTOR)}
\par //zamiana pokolenia losową strategią (parametry zależne od wylosowanej strategii)
\par \texttt{P = REPLACEMENT-STRATEGY(PARAMETERS)}
\par \texttt{POPULATION-EVALUATION(P, F)}\\
\noindent \texttt{\}}\\

\section[Obsługa programu]{Obsługa programu}

\subsection[Kompilacja i uruchamianie]{Kompilacja i uruchamianie}
Program został napisany w całości w języku C\# przy użyciu zestawu narzędzi programistycznych
Microsoft Visual Studio 2008.\\
Nie gwarantujemy, że przy innej wersji zintegrowanego środowiska programistycznego,
a w szczególności innej wersji kompilatora języka C\# program będzie działał
poprawnie. Aplikacja była testowana pod systemem Windows XP Professional z zainstalowanym
dodatkiem Service Pack 2 i jest przeznaczona wyłącznie dla systemów
operacyjnych Microsoft Windows.

\subsection[Parametry konstruktora klasy algorytmu]{Parametry konstruktora klasy algorytmu}
Główna metoda programu (\texttt{Main}), z poziomu której wywołuje się algorytm, znajduje się pliku źródłowym \texttt{Program.cs}, w klasie \texttt{Program}.\\
Przed rozpoczęciem działania algorytmu należy utworzyć nowy obiekt klasy \texttt{Algorithm} podając kolejno następujące parametry dla konstruktora klasy:
\begin{itemize}
    \item[-] \texttt{N} -- rozmiar populacji (zmienna typu \texttt{int});
    \item[-] \texttt{iter} -- liczba iteracji, po której algorytm ma się skończyć (zmienna typu \texttt{int});
    \item[-] \texttt{teta} -- prawdopodobieństwo mutacji na pojedynczym bicie (zmienna typu \texttt{double});
    \item[-] \texttt{uniformPr} -- prawdopodobieństwo wylosowania krzyżowania jednorodnego jako operatora krzyżowania, w danej iteracji programu (zmienna typu \texttt{double}) -- sugerowana wartość w granicach 0.35;
    \item[-] \texttt{halfPr} -- prawdopodobieństwo wylosowania krzyżowania half-uniform jako operatora krzyżowania, w danej iteracji programu (zmienna typu \texttt{double}) -- sugerowana wartość w granicach 0.15 (gwarantuje wymianę genów na średnim poziomie);
    \item[-] \texttt{onePr} -- prawdopodobieństwo wylosowania krzyżowania jednopunktowego jako operatora krzyżowania, w danej iteracji programu (zmienna typu \texttt{double}) -- sugerowana wartość w granicach 0.15;
    \item[-] \texttt{twoPr} -- prawdopodobieństwo wylosowania krzyżowania dwupunktowego jako operatora krzyżowania, w danej iteracji programu (zmienna typu \texttt{double}) -- sugerowana wartość w granicach 0.35 (teoretycznie bardziej miesza geny niż krzyżowanie jednopunktowe);
    \item[-] \texttt{fullPr} -- prawdopodobieństwo wylosowania strategii full swap jako strategii zamiany pokolenia, w danej iteracji programu (zmienna typu \texttt{double}) -- sugerowana wartość w granicach 0.1 (za prosta, w ogóle nic nie wybiera, tylko podmienia);
    \item[-] \texttt{bestPopChilPr} -- prawdopodobieństwo wylosowania strategii best of current population and children jako strategii zamiany pokolenia, w danej iteracji programu (zmienna typu \texttt{double}) -- sugerowana wartość w granicach 0.4 (strategia rozsądniejsza niż \texttt{full swap});
    \item[-] \texttt{bestOfPairPr} -- prawdopodobieństwo wylosowania strategii best of pair jako strategii zamiany pokolenia, w danej iteracji programu (zmienna typu \texttt{double}) -- sugerowana wartość w granicach 0.1 (powoduje bardzo mocną zbieżność, być może do ekstremum lokalnego);
    \item[-] \texttt{replaceKPr} -- prawdopodobieństwo wylosowania strategii replace k worst jako strategii zamiany pokolenia, w danej iteracji programu, domyślnie z parametrem $k = N/4$ (zmienna typu \texttt{double}) -- sugerowana wartość w granicach 0.4 (dobra strategia przy domyślnym (albo innym rozsądnym) ustawieniu parametrów).
\end{itemize}

\noindent Aby rozpocząć ewolucję należy wywołać na utworzonym obiekcie klasy \texttt{Algorithm} metodę \texttt{doTheEvolution}, która przyjmuje następujące parametry:
\begin{itemize}
    \item[-] \texttt{dateFrom} -- data, która jest początkiem danych historycznych (zmienna typu \texttt{DateTime});
    \item[-] \texttt{dateTo} -- data, która jest końcem danych historycznych (zmienna typu \texttt{DateTime});
    \item[-] \texttt{path} -- ścieżka do danych historycznych badanej spółki na dysku twardym (zmienna typu \texttt{string});
    \item[-] \texttt{cash} -- kwota dla każdego eksperta na inwestycje (zmienna typu \texttt{decimal}).
\end{itemize}

\noindent Metoda \texttt{doTheEvolution} zwraca parę wartości:
\begin{itemize}
    \item[-] \texttt{max} - wartość zarobiona w określonym przedziale czasowym, na akcjach danej spółki, przez najlepszego eksperta, w ciągu wszystkich iteracji algorytmu (zmienna typu \texttt{double});
    \item[-] \texttt{best\_expert} -- genotyp najlepszego eksperta (zmienna typu \texttt{bool[]}).
\end{itemize}

\noindent Aby sprawdzić osiągnięcia zwróconego przez algorytm najlepszego eksperta w innych przedziałach czasowych lub/i na akcjach innych spółek, należy po dokonaniu ewolucji wywołać na obiekcie klasy \texttt{Algorithm} metodę \texttt{simulate\_best\_expert}, o parametrach analogicznych do parametrów metody \texttt{doTheEvolution}. Metoda \texttt{simulate\_best\_expert} symuluje (już bez ewolucji) inwestycje eksperta i zwraca wartość zarobioną przez testowanego eksperta w zadanym przedziale czasu, na akcjach zadanej spółki (zmienna typu \texttt{double}).

\section[Testy]{Testy}
\subsection[Test nr. 1]{Test nr. 1}
Test nr. 1 polegał na znalezieniu drogą ewolucji eksperta, który najlepiej zainwestuje swoje pieniądze w akcje spółki KGHM, w okresie od 1 stycznia 2002 roku do 1 stycznia 2010 roku. Następnie, już bez ewolucji, decyzje inwestycyjne najlepszego eksperta podlegają symulacji za okres od 1 stycznia 2010 do 1 grudnia 2010 roku, również w odniesieniu do akcji spółki KGHM.\\


     \begin{figure}[!hbp]
       \caption{Wykres notowań KGHM (okres 01.01.01 - 17.12.10)}
	    \label{fig:kghm.eps}
	      \centering
	        \includegraphics[type=eps,ext=.eps,read=.eps,width=14cm]{kghm}
     \end{figure}

Po wykresie notowań widać, że kurs spółki KGHM w latach 2001-2005 był dosyć stabilny. Jednak od roku 2005 ceny akcji poszły znacząco w górę, co jest dobrą okazją do zarobku dla danego eksperta. Wymagania, jakie postawił test nr. 1 dla ekspertów to umiejętność przewidywania silnej tendencji wzrostowej w latach 2005-2007 i w latach 2009, 2010 oraz kryzysu jaki miał miejsce w roku 2008, gdzie zanotowano bardzo wyraźne spadki.\\
Ponadto znalezionego drogą ewolucji najlepszego eksperta, wytestowano, pod kątem danych z pierwszych 11 miesięcy roku bieżącego, kiedy to odnotowano bardzo silne wzrosty, które w rezultacie doprowadziły do rekordowo dobrych notowań spółki KGHM. \\

\newpage Parametry algorytmu:\\\\


\begin{tabular}{||c|c||} \hline
\multicolumn{2}{||c||}{Parametry dla algorytmu} \\ \hline
N &  100\\
\hline
iter & 200 \\
\hline
teta & 0.1 \\
\hline
uniformPr & 0.35 \\
\hline
halfPr & 0.15 \\
\hline
onePr & 0.15 \\
\hline
twoPr & 0.35 \\
\hline
fullPr & 0.1 \\
\hline
bestPopChilPr & 0.4 \\
\hline
bestOfPairPr & 0.15 \\
\hline
replaceKPr & 0.35 \\
\hline
\end{tabular}
\\\\
     \begin{figure}[!hbp]
       \caption{KGHM zarobki najlepszego eksperta w danej iteracji (okres 01.01.02-01.01.10) }
	    \label{fig:kghmwykres.eps}
	      \centering
	        \includegraphics[type=eps,ext=.eps,read=.eps,width=14cm]{kghmwykres}
     \end{figure}

Wyniki algorytmu (patrz Rysunek 2.) jednoznacznie świadczą o tym, że ewolucja poszła we właściwym kierunku.
Najlepszy ekspert z 1. losowej populacji, mając do dyspozycji tylko 8 tysięcy złotych, potrafi zarobić w ciągu 8 lat na akcjach KGHM 78527,4 złotych, co świadczy o tym, że rozważane reguły zostały poprawnie dobrane. Dalsza ewolucja polega właściwie tylko na maksymalizowaniu i tak bardzo wysokiego zysku. Postępy w ewolucji dokonują się dosyć nieregularnymi i rzadkimi, ale zazwyczaj znacznymi wzrostami (tylko 2 raz zdarzył się spadek zarobków najlepszego eksperta w danej iteracji, co utrzymało się tylko przez kilka iteracji). Dzieje się tak, ponieważ często potrzeba wyraźnych zmian w genotypie danego eksperta, aby zmienić jego dotychczasowe decyzje, w poszczególnych przedziałach czasu. W dodatku decyzje poszczególnych reguł są często podobne (po prostu są dobre), więc nawet bardzo różni genotypowo eksperci potrafią inwestować bardzo podobnie lub wręcz identycznie, z równie pozytywnym skutkiem. Ostatecznie, dzięki ewolucji najlepszy wynik dla losowej populacji udało się poprawić ponad dwukrotnie (najlepszy osobnik zarobił 158646,95 złotych), co przy tak dużych sumach jest wyraźnym postępem.\\

\textbf{Symulacja znalezionego, najlepszego eksperta, dla danych z pierwszych 11 miesięcy roku bieżącego przyniosła dodatkowy zarobek w wysokości 2233,8 złotych.}\\
Wynik ten należy uznać za zadowalający. Inwestycje dokonane przez najlepszego eksperta, zgodnie z sygnałami wybranych reguł, okazały się trafione i wykorzystały wzrost cen akcji KGHM w badanym okresie.\newpage

\subsection[Test nr. 2]{Test nr. 2}
W drugim teście wykorzystamy notowania spółki Getin Bank. Pierwszym krokiem będzie  wygenerowanie eksperta dla notowań z lat 2002-2004. Następnie sprawdzimy, jakie zyski osiągnie ekspert w kolejnych latach.

    \begin{figure}[!hbp]
       \caption{Wykres notowań GETIN (okres 01.01.01 - 17.12.10)}
	    \label{fig:getin.eps}
	      \centering
	        \includegraphics[type=eps,ext=.eps,read=.eps,width=14cm]{getin}
     \end{figure}

Na wykresie możemy zaobserwować, że w tym okresie cena spółki najpierw mocno spadła, a następnie spokojnie wzrastała. Łączny zysk, jaki mogła odnieść osoba kupująca 1 stycznia 2002 roku i sprzedająca podczas ostatniej sesji w roku 2004 wynosił 75\%.

Parametry algorytmu pozostawiamy takie jak w poprzednim teście, zwiększamy jedynie liczbę iteracji do 500. Zakładamy, że inwestor inwestuje 50 tys. zł w gotówce i posiada już pakiet akcji warty około 50 tys. zł. Prześledźmy proces uczenia się eksperta:
\newpage
 \begin{figure}[!hbp]
   \caption{Proces uczenia się eksperta GETIN 2002-2004}
    \label{fig:getin_ekspert.eps}
      \centering
        \includegraphics[width=14cm]{getin_ekspert.eps}
 \end{figure}

 Najlepszy ekspert, jakie udało się stworzyć osiągnął 85709,81 zł zysku co stanowi 85,7\% zysk. Osiągnęliśmy bardzo dobry poziom zysku. Sprawdzimy jeszcze jak zachowa się wygenerowany ekspert w kolejnych latach:

\begin{itemize}
    \item[-] w roku 2005 ekspert  osiągnął zysk 29 560,77 zł, wynik niezbyt zadowalający jeśli wziąść pod uwagę, że w tym czasie spółka urosła o 100\%,
    \item[-] w latach 2005-2007 zysk wyniósł  93 377,78 zł,
    \item[-] w latach 2005-2009 zysk spadł do łącznie 57 227,83 zł.
\end{itemize}

Z takich wyników możemy wnioskować, że ekspert  stworzony w czasie, gdy ceny akcji stabilnie wzrastały nie poradził sobie z kryzysem z roku 2008, w którym akcje Getin Banku straciły znaczną część wartości.

\subsection[Test nr. 3]{Test nr. 3}

Biorąc pod uwagę wnioski z poprzedniego testu będziemy chcieli zobaczyć jak będzie zachowywał się algorytm w sytuacji odwrotnej. Stworzymy eksperta na podstawie notowań z okresu ostatniego światowego kryzysu i zobaczymy jak będzie się zachowywał w późniejszym czasie, gdy ceny znów zaczęły  wzrastać. Do tego testu wykorzystamy  notowania BZ WBK.

Okresem testowym będzie okres od 1 maja 2007 do 1 maja 2009 r. W tym czasie akcje BZ WBK cały czas systematycznie spadały. Łączny spadek wyniósł około 70\%.

\begin{figure}[!hbp]
   \caption{Wykres notowań BZWBK (okres 01.01.01 - 17.12.10)}
    \label{fig:bzwbk.eps}
      \centering
        \includegraphics[type=eps,ext=.eps,read=.eps,width=14cm]{bzwbk}
 \end{figure}


 \begin{figure}[!hbp]
   \caption{Proces uczenia się eksperta BZWBK 1 maj 2007 - 1 maj 2009}
    \label{fig:bz.eps}
      \centering
        \includegraphics[width=14cm]{bz.eps}
 \end{figure}


Analiza działania algorytmu pokazuje, że nie udało mu się osiągnąć zysku, a najlepszy osiągnięty wynik to -10160,18 zł. Taki wynik, możemy jednak  uznać za satysfakcjonujący, ponieważ algorytm znacznie ograniczył straty jakie poniósłby inwestor trzymający akcje przez cały ten okres.

Zobaczmy jednak, jakie zdolności do przewidywania  przyszłych cen ma wygenerowany ekspert. Przeanalizujmy sytuację w kolejnym roku, a więc od 1 maja 2009 do 1 maja 2010. W tym czasie ekspert  osiągnął zysk w wysokości 64979,10 zł, co stanowi połowę 130\% zysku, jaki osiągnąłby w tym czasie inwestor trzymający akacje przez cały ten okres.

Analiza tego przypadku pokazuje, że również w sytuacji gdy ekspert  uczy się na danych gdzie cena spółki przez większość czasu spada, nie radzi sobie dobrze po odwróceniu trendu.\\

Analiza przypadków drugiego i trzeciego pokazuje, że zaprezentowany algorytm dobrze dobiera zestaw wykorzystywanych wskaźników giełdowych gdy akacje poruszają się w trendzie wzrostowym lub spadkowym, ale znacznie gorzej, gdy następuje odwrócenie się trendu. W takich okresach algorytm osiąga zyski lub minimalizuje stratę, jednak przy doborze innych wskaźników osiągnięty zysk mógłby być lepszy.
\newpage
\subsection[Test nr. 4]{Test nr. 4}
Test nr. 4 polegał na znalezieniu drogą ewolucji eksperta, który najlepiej zainwestuje swoje pieniądze w akcje spółki PEKAO, w okresie od 1 stycznia 2001 roku do 1 stycznia 2009 roku. Następnie, już bez ewolucji, decyzje inwestycyjne najlepszego eksperta podlegają symulacji za okres od 1 stycznia 2009 do 1 grudnia 2010 roku, również w odniesieniu do akcji spółki PEKAO.\\


     \begin{figure}[!hbp]
       \caption{Wykres notowań PEKAO (okres 01.01.01 - 17.12.10)}
	    \label{fig:pekao.eps}
	      \centering
	        \includegraphics[type=eps,ext=.eps,read=.eps,width=14cm]{pekao}
     \end{figure}


 Notowania spółki PEKAO w latach 2001-2007 cechuje konsekwentna, zazwyczaj niezbyt ostra, tendencja wzrostowa, z niewielkimi, rzadkimi spadkami. Wymagania, jakie postawił test nr. 4 dla ekspertów to umiejętność przewidywania powolnej ale ciągłej tendencji wzrostowej w latach 2001-2007 i stabilnego kursu w latach 2009-2010 oraz kryzysu jaki miał miejsce w roku 2008, gdzie zanotowano bardzo wyraźne spadki.\\
Ponadto znalezionego drogą ewolucji najlepszego eksperta, wytestowano, pod kątem danych z roku 2009 i 11 miesięcy roku bieżącego, kiedy to kurs był stabilny. \\
\newpage
Parametry algorytmu:\\


\begin{tabular}{||c|c||} \hline
\multicolumn{2}{||c||}{Parametry dla algorytmu} \\ \hline
N &  200\\
\hline
iter & 100 \\
\hline
teta & 0.1 \\
\hline
uniformPr & 0.35 \\
\hline
halfPr & 0.15 \\
\hline
onePr & 0.15 \\
\hline
twoPr & 0.35 \\
\hline
fullPr & 0.1 \\
\hline
bestPopChilPr & 0.25 \\
\hline
bestOfPairPr & 0.20 \\
\hline
replaceKPr & 0.45 \\
\hline
\end{tabular}
\\\\

     \begin{figure}[!hbp]
       \caption{PEKAO zarobki najlepszego eksperta w danej iteracji (okres 01.01.01-01.01.09) }
	    \label{fig:pekaowykres}
	      \centering
	        \includegraphics[type=eps,ext=.eps,read=.eps,width=14cm]{pekaowykres}
     \end{figure}

Osiągnięcia najlepszego eksperta (patrz Rysunek 8.) można uznać za zadowalające.\\
Użyte reguły przewidziały ogólną tendencję wzrostową na przestrzeni pierwszych 7 lat, świadczą o tym wyniki najlepszego eksperta z 1. populacji, który zarobił 9633 złotych (więcej, niż podwajając stan początkowy swojego konta, które jak zawsze wynosiło 8000 złotych), nie tracąc przy tym zgromadzonego majątku w trakcie kryzysu, który miał miejsce w 2008 roku. Postępy w ewolucji dokonują się dosyć nieregularnymi i rzadkimi, ale zazwyczaj znacznymi wzrostami (tylko 2 razy zdarzył się spadek zarobków najlepszego eksperta w danej iteracji, co utrzymało się tylko przez kilkanaście iteracji). W wyniku ewolucji udało się wygenerować eksperta, który zarobił 19763,6 złotych. Nie jest to tak imponująca kwota jak w przypadku testu nr. 1, ale w tamtym przypadku wzrosty, w pewnym momencie były znacznie ostrzejsze, a więc łatwiejsze do przewidzenia przez ekspertów, co pozwalało szybciej zarabiać.

\textbf{Symulacja znalezionego, najlepszego eksperta, dla danych z roku 2009 i z pierwszych 11 miesięcy roku bieżącego przyniosła dodatkowy zarobek w wysokości 1967,9 złotych.} Test nr. 4 pokazał, że eksperci są w stanie odczytywać bardziej subtelne sygnały o mniejszych ale ciągłych wzrostach, co również jest przydatną umiejętnością.
\newpage
\subsection[Test nr. 5]{Test nr. 5}
Test nr. 5 polegał na znalezieniu drogą ewolucji eksperta, który najlepiej zainwestuje swoje pieniądze w akcje spółki EUROMARK, w okresie od 29 września 2006 roku do 1 maja 2008 roku. Następnie, już bez ewolucji, decyzje inwestycyjne najlepszego eksperta podlegają symulacji za okres od 1 maja 2008 roku do 1 maja 2009 roku oraz za okres od 1 maja 2009 roku do 10 grudnia 2010 roku również w odniesieniu do akcji spółki EUROMARK.\\


     \begin{figure}[!hbp]
       \caption{Wykres notowań EUROMARK (okres 29.09.06 - 18.12.10)}
	    \label{fig:euromark.eps}
	      \centering
	        \includegraphics[type=eps,ext=.eps,read=.eps,width=14cm]{euromark}
     \end{figure}

Notowania spółki EUROMARK na samym początku, po wkroczeniu na giełdę wyraźnie wzrosły. Świadczy to o tym, że na starcie akcje spółki był niedocenione i na późniejszym wzroście można było dobrze zarobić.\\
Reakcja inwestorów okazała się jednak mocno przesadzona, co doprowadziło z kolei do zbyt wysokiego i szybkiego wzrostu, powodując następnie przez kolejne okresy konsekwentne spadki, które w dodatku zostały pogłębione przez ogólny kryzys na giełdzie w roku 2008.\\
Od połowy roku 2009 można zaobserwować koniec kryzysu i nieznaczny wzrost kursu akcji.\\


W ramach testu nr. 5, zwiększona została liczba iteracji do 500. Reszta parametrów algorytmu pozostała niezmieniona w stosunku do
testu nr. 4.

     \begin{figure}[!hbp]
       \caption{EUROMARK zarobki najlepszego eksperta w danej iteracji (okres 29.09.06-01.05.08)}
	    \label{fig:euromarkwykres}
	      \centering
	        \includegraphics[type=eps,ext=.eps,read=.eps,width=14cm]{euromarkwykres}
     \end{figure}
\newpage
Osiągnięcia najlepszego eksperta (patrz Rysunek 10.) można uznać za stosunkowo niezłe.\\
Najlepszy ekspert wykorzystał moment krótkotrwałego, ale silnego wzrostu, na samym początku badanego okresu. Później, kiedy kurs zaliczał kolejne minima, potrafił zminimalizować straty, tak aby ogólny bilans inwestycji był dodatni.\\
Ewolucja wywindowała zarobki najlepszego eksperta z 649,7 złotych (losowe pokolenie) do 1337,8 złotych (najlepszy ekspert we wszystkich iteracjach). Postępy w ewolucji są znowu bardzo nieregularne, z licznymi, ale zazwyczaj małymi spadkami oraz co najważniejsze, ogólną tendencją wzrostową, która utrzymywała się praktycznie przez cały czas trwania testu.\\

\textbf{Pierwsza symulacja znalezionego, najlepszego eksperta, dla danych od 1 maja 2008 roku do 1 maja 2009 roku przyniosła straty w wysokości 6442,8 złotych.} Kiepski wynik jest spowodowany tym, że na testowany okres przypadł najgłębszy kryzys. Reguły przewidywały odbicie się kursu od dna, co jednak nie miało miejsca z powodu, ogólnego kryzysu na giełdzie w roku 2008.\\

\textbf{Druga symulacja znalezionego, najlepszego eksperta, dla danych od 1 maja 2009 roku do 10 grudnia 2010 roku przyniosła dodatkowy zarobek w wysokości 22440 złotych.} Najlepszy ekspert, w sposób wzorowy, wykorzystał odwracającą się tendencję związaną z końcem długotrwałego kryzysu. Uzyskany zarobek jest ok. 3.5 razy większy niż strata poniesiona podczas pierwszej symulacji.\\

Test nr. 5 pokazał, że eksperci są w stanie orientować się, które akcje mogą być niedocenione i przewidywać ich silny wzrost. Ponadto eksperci potrafią minimalizować straty poniesione w trakcie silnych i długotrwałych spadków oraz potrafią zarabiać na odwracającej się w sposób dla nich korzystny, tendencji.


\subsection[Wnioski z testowania]{Wnioski z testowania}

Badanie pokazało, że za pomocą algorytmów ewolucyjnych da się stworzyć narzędzie analizujące dane giełdowe, a następnie pomagające w podejmowaniu decyzji o kupnie bądź sprzedaży akcji. Jednak uzyskane wyniki sugerują, że nie istnieją  wyraźne powiązania między zachowaniem się wskaźników w przeszłości i przyszłości, co ogranicza możliwość  wykorzystania tego typu narzędzi do osiągania  maksymalnych zysków z inwestycji.\\
Wszelkie przewidywania dotyczące giełdy papierów wartościowych i finansów w ogóle są niezwykle ważne, jednocześnie stanowią ogromne wyzwanie.\newpage
Mając do dyspozycji głównie dane historyczne, należy przewidywać kursy, na które wpływ mają również inne czynniki, których często nie da się przewidzieć, np:
\begin{itemize}
    \item[-] aktualne wydarzenia polityczne,
    \item[-] ogólna kondycja ekonomiczna rynku oraz kondycja danej branży,
    \item[-] oczekiwania i posunięcia innych graczy.
\end{itemize}


\end{document}
